//
//  NSDate+STDate.m
//  OCVVeibo
//
//  Created by leergou on 16/7/30.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

#import "NSDate+STDate.h"

@implementation NSDate (STDate)
// 日期格式单例
+ (NSDateFormatter *)sharedFormatter{
    static NSDateFormatter *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[NSDateFormatter alloc] init];
    });
    return instance;
}
// 日历单例
+ (NSCalendar *)sharedCalender{
    
    static NSCalendar *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [NSCalendar currentCalendar];
    });
    return instance;
}

#pragma mark - 提供一个方法直接从传入的字符串,返回想要的时间格式字符串
+ (NSString *)getAStringWithDateString:(NSString *)dateString{
    return [[NSDate getDateWithString:dateString] dateDescription];
}

#pragma mark - 时间格式转化
+ (NSDate *)getDateWithString:(NSString *)dateString{
    
    //created_at = Sun Apr 10 14:43:16 +0800 2016;
    
    NSDateFormatter *formatter = [NSDate sharedFormatter];
    // 指定地区,如果不指定,真机可能出现问题
    formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
    // 指定日期格式
    formatter.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";
    //根据传入的字符串,返回日期
    return [formatter dateFromString:dateString];
}

#pragma mark - 将日期转成想要的字符串格式
- (NSString *)dateDescription{
    
    // 获取时间格式对象
    NSDateFormatter *formatter = [NSDate  sharedFormatter];
    // 获取日历对象
    NSCalendar *calendar = [NSDate sharedCalender];
    // 指定地区
    formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
    
    // 首先判断要转字符串的日期是否时间年
    BOOL isThisYear = [self isThisYear];
    
    // 是今年
    if (isThisYear) {
        // 判断,若是今天
        if ([calendar isDateInToday:self]) {
            // 获取当前时间与指定时间的时间差
            NSInteger interval = (NSInteger)[[NSDate date] timeIntervalSinceDate:self];
            // 进行判断
            if (interval < 60) {
                return @"刚刚";
            } else if (interval > 60 && interval < 3600){
                return [NSString stringWithFormat:@"%ld分钟前",interval/60];
            } else {
                return [NSString stringWithFormat:@"%ld小时前",interval/3600];
            }
        } else if ([calendar isDateInYesterday:self]){
            // 是昨天
            formatter.dateFormat = @"昨天: HH:mm";
        } else {
            // 其他
            formatter.dateFormat = @"MM月dd日 HH:mm";
        }
    } else {
        // 不是今年
        formatter.dateFormat = @"yyyy年MM月dd日 HH:mm";
    }
    return [formatter stringFromDate:self];
}


#pragma mark - 判断是否是今年
- (BOOL)isThisYear{
    
    // 获取时间格式对象
    NSDateFormatter *formatter = [NSDate  sharedFormatter];
    // 指定地区
    formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
    // 指定时间格式
    formatter.dateFormat = @"yyyy";
    // 获取当前日期
    NSDate *currentDate = [NSDate date];
    // 将要判断的日期 和 当前日期转为指定格式字符串
    NSString *currentDateString = [formatter stringFromDate:currentDate];
    NSString *aDateString = [formatter stringFromDate:self];
    
    return [currentDateString isEqualToString:aDateString];
}


@end











